<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 点击按钮弹出警告 -->
    <input type="button" value="点击" onclick="(function(){
        alert('别点我');
    })" >
    
    <script>
        //函数表达式：把函数当作一个值赋给变量
        //注：函数表达式必须先声明再调用
        let f1 = function fun(){
            console.log('hello,f1');
        }
        //函数调用：变量名()调用。
        f1();
        let f2 = function fun2(name){
            console.log('hello'+name);
        }
        f2('你好');
        //匿名函数:函数没有名字
        let f3 = function(a,b){
            return a<b?a:b;
        }
        //立即执行函数：匿名函数自调用。用（）括起来的部分是一个整体
        console.log(f3(12,8));
        (function(a,b){
            console.log(a+b);
        })(1,2);
        let a = function(){
            console.log(1);
        }
        console.log(typeof a);//函数的数据类型：属于object对象；和数组一样
        //把函数这个值作为实参传给另一个函数
        //回调函数：把函数A当作参数传给函数B，在函数B中调用函数A，此时A叫做回调函数
        let myf1 = function(a){
          a();//myf2();
        }
        let myf2 = function(){
            console.log('myf2');
        }
        myf1(myf2);
        //递归函数 ：把函数A当作参数传给函数A，在函数A中调用函数A。在函数中调用自己
        //阶乘：10！=10*9*8*7*6*5*4*3*2*1  >  10*(9!)  >  10*9*(8!)  >  10*9*8*(7!)
        let jc = function(n){
            if (n===1) {
                return 1;
            }else{
                return n*jc(n-1);
            }
        }
        console.log(jc(10));
    </script>
</body>
</html>